<?php
require '../vendor/autoload.php';

use Aws\Lambda\LambdaClient;


/**
 * 通过PHP脚本来调用已部署好的lambda程序
 * 前置条件：已在AWS上部署好了一个名为helloGo的程序，它是用go语言写的
 * 这个程序通过json数据类型，接收3个字段，分别是：Name,Age,addr
 * 然后把这三个字段，拼接成一个字符串，通过json返回
 * 执行方法：进行命令行， php 01.php
 */
class MyLambda
{
    protected $client;
    //与AWS的Lambda建立连接，获取client
    public function __construct()
    {
        try {
            //配置认证参数
            $region = 'us-west-2';
            $version = "latest";
            $awskey = 'AKIA4SBKFCJAXUOUXUN2';
            $secret = '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';
            $credentials = array(
                'region' => $region,
                'version' => $version,
                'credentials' => array(
                    'key' => $awskey,
                    'secret' => $secret,
                )
            );
            $this->client = new LambdaClient($credentials);
        } catch (Exception $e) {
            echo '无法创建 lambda client ' . $e->getMessage();
        }
    }

    /**
     * 调用lambda程序，获取执行结果
     * @param [type] $functionName 就是在AWS控制台，创建lambda函数时所启的名字
     * @param [type] $Payload 请求参数
     * @return array
     */
    public function invoke($functionName, $Payload)
    {
        //远程调用lambda,获取的结果，存在res里
        $res = $this->client->invoke([
            "FunctionName" => $functionName,
            "Payload" => json_encode($Payload) //这里的payLoad是请求参数
        ]);
        //这里的payLoad是响应结果
        $payload = $res->get("Payload");
        $arr = json_decode($payload, true);
        if (!$arr) {
            return false;
        }
        return $arr;
    }
}
$lambda = new MyLambda();
$payLoad = [
    'Name' => "李雷",
    'Age' => 14,
    'addr' => "Kiev"
];
$re = $lambda->invoke("helloGo", $payLoad);
print_r($re);
